import java.util.HashMap;

/**
 * @version v1.0
 * @Description:
 * @Author zhanzhongxin
 * @Date 2021/7/6 15:53
 * @Copyright 博为峰
 */
public class Demo07 {
    public static void main(String[] args) {
        //位运算符 & | ^ ~(取反) <<(左移) >>(右移) >>>(无符号右移)
        System.out.println(6 & 3);

        System.out.println(6 ^ 3 ^ 3);//一个数异或同一个数两次还是原来的数

        System.out.println(~6);//-7   负数的二进制    ~正数+1=负数二进制  -6 = ~6 + 1

        System.out.println(3 << 3);//左移几位就是该数乘以2的几次方 3 * 2的3次方

        System.out.println(6 >> 2);//右移几位就是该数除以2的几次方，对于高位出现的空位，高位原来是什么数据就用此数据补空位

        System.out.println(6 >>> 2);//右移几位就是该数除以2的几次方，对于高位出现的空位，都用0补空位

        //用最高效的方式算出2*8
//        System.out.println(2 << 3);

        int a = 3;
        int b = 6;

        //1.第三方变量
//        int c;
//        c = a;
//        a = b;
//        b = c;
//        System.out.println("a = " + a);
//        System.out.println("b = " + b);
        //2.使用^运算符
        a = a ^ b;//3^6
        b = a ^ b;//3^6^6
        a = a ^ b;//3^6^3
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}
